package com.yunchang.open.iploaction.analyzer;

import com.yunchang.open.iploaction.Location;
import com.yunchang.open.iploaction.parser.IPv4Parser;
import com.yunchang.open.iploaction.utils.LocationUtil;

import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * 默认的地区分析器。
 * 策略是尽量返回信息完整的地区。
 * Created by jasontujun on 2019/7/2.
 */
public class DefaultLocationAnalyzer implements LocationAnalyzer {

    /**
     * 计算地址的详细分数，最高分为 10 + parser.getPriority()
     * 分数权重：城市 4分、省份3分、国家2分、运营商1分
     * 10可用于控制是否需要下一个解析器解析地址
     *
     * @return 解析结果的打分
     */
    @Override
    public int score(String ip, IPv4Parser parser, Location location) {
        if (location == null) {
            return parser.getPriority();
        }
        return 4 * (LocationUtil.isUnknownPlace(location.getCity()) ? 0 : 1) +
                3 * (LocationUtil.isUnknownPlace(location.getProvince()) ? 0 : 1) +
                2 * (LocationUtil.isUnknownPlace(location.getCountry()) ? 0 : 1) +
                (LocationUtil.isUnknownPlace(location.getIsp()) ? 0 : 1) +
                parser.getPriority();
    }

    @Override
    public boolean accept(String ip, IPv4Parser parser, Location location, int score) {
        // 如果分数小于10，怎今夕下一个解析器解析 (城市 4分、省份3分、国家2分、运营商1分)
        return score - parser.getPriority() < 10;
    }
}
